﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIGEB.Modelo.moduloEjemplar;
using SIGEB.Prototipo.control;
using SIGEB.Modelo.moduloPerfiles;

namespace SIGEB.Prototipo.Control
{
    public class controlEjemplares
    {
        #region "constructores

        public controlEjemplares(controlPrincipal cp)
        {
            this.cp = cp;
        }

        #endregion

        #region "validación"

        internal bool existeEjemplar(string id)
        {
            return cp.datos.ejemplares.obtenerejemplar(id) != null;
        }

        internal bool valoresEjemplarValido(ejemplar nuevo)
        {
            return true;
        }

        internal bool datosModificablesValidos(ejemplar doc)
        {
            throw new NotImplementedException();
        }

        private bool textoBusquedaValido(string texto)
        {
            return Validacion.LongitudCadenaValida(texto, true, 0);
        }

        internal bool idValido(string id)
        {
            return Validacion.LongitudCadenaValida(id, true, 0);
        }

       
        #endregion

        #region "métodos"

        internal void agregarEjemplar(ejemplar nuevo)
        {
            if (!valoresEjemplarValido(nuevo))
            {
                throw new Exception("Los valores del ejemplar no son válidos");
            }
            if (!cp.usuarioActualPuede(acciones.EJEM_AGREGAR))
            {
                cp.ExcepcionUsrSinPermisos();
            }
            cp.datos.ejemplares.agregarejemplar(nuevo);
        }

        internal void modificarDatos(string idEjem, ejemplar doc)
        {
            if (!datosModificablesValidos(doc))
            {
                throw new Exception("Error de los datos modificables");
            }
            if (!cp.usuarioActualPuede(acciones.EJEM_MODIFICAR))
            {
                cp.ExcepcionUsrSinPermisos();
            }
        }

        internal LinkedList<ejemplar> ejemplaresPorDocumento(string cod)
        {
            if (!cp.usuarioActualPuede(acciones.EJEM_CONSULTAR))
            {
                cp.ExcepcionUsrSinPermisos();
            }
            if (string.IsNullOrEmpty(cod))
            {
                return new LinkedList<ejemplar>();
            }
            return cp.datos.ejemplares.obtenerByDocumento(cod);
        }

        internal void desactivarEjemplar(string codigo)
        {
            if (!cp.usuarioActualPuede(acciones.EJEM_MODIFICAR))
            {
                cp.ExcepcionUsrSinPermisos();
            }
            cp.datos.ejemplares.desactivar(codigo);
        }

        internal void eliminar(string id)
        {
            if (!idValido(id))
            {
                throw new Exception("El id no es válido");
            }
            if (!cp.usuarioActualPuede(acciones.EJEM_ELIMINAR))
            {
                cp.ExcepcionUsrSinPermisos();
            }
            cp.datos.ejemplares.eliminarejemplar(id);
        }

        internal LinkedList<ejemplar> todosEjemplar()
        {
            if (!cp.usuarioActualPuede(acciones.EJEM_CONSULTAR) && !cp.usuarioActualPuede(acciones.CONSULTA_CONSULTAR))
            {
                cp.ExcepcionUsrSinPermisos();
            }
            return cp.datos.ejemplares.obtenerTodos();
        }

        internal ejemplar ejemplarCodigo(string id)
        {
            if (!idValido(id))
            {
                throw new Exception("id ejemplar inválido");
            }
            if (!cp.usuarioActualPuede(acciones.EJEM_CONSULTAR)&&!cp.usuarioActualPuede(acciones.CONSULTA_CONSULTAR))
            {
                cp.ExcepcionUsrSinPermisos();
            }

            return cp.datos.ejemplares.obtenerejemplar(id);
        }

        internal void activarEjemplar(string codigo)
        {
            if (!cp.usuarioActualPuede(acciones.EJEM_MODIFICAR))
            {
                cp.ExcepcionUsrSinPermisos();
            }
            cp.datos.ejemplares.activarEjemplar(codigo);
        }

        #endregion

        #region "atributos"
        
        internal controlPrincipal cp { get; set; }

        #endregion
    }
}
